/**
* @file
*/
/******************************************************************************
* Copyright AllSeen Alliance. All rights reserved.
*
*    Permission to use, copy, modify, and/or distribute this software for any
*    purpose with or without fee is hereby granted, provided that the above
*    copyright notice and this permission notice appear in all copies.
*
*    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
*    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
*    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
*    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
*    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
*    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
*    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
******************************************************************************/

#include <windows.h>
#include <stdio.h>

extern "C" {

BOOL CryptAcquireContext(
    _Out_ HCRYPTPROV *phProv,
    _In_  LPCTSTR    pszContainer,
    _In_  LPCTSTR    pszProvider,
    _In_  DWORD      dwProvType,
    _In_  DWORD      dwFlags
    )
{
    *phProv = NULL;
    return TRUE;
}

BOOL CryptGenRandom(
    _In_    HCRYPTPROV hProv,
    _In_    DWORD      dwLen,
    _Inout_ BYTE       *pbBuffer
    )
{
    if (pbBuffer)
    {
        Windows::Storage::Streams::IBuffer^ buffer = Windows::Security::Cryptography::CryptographicBuffer::GenerateRandom(dwLen);
        Platform::Array<unsigned char, 1U>^ charArray = ref new Platform::Array<unsigned char, 1U>(dwLen);
        Windows::Security::Cryptography::CryptographicBuffer::CopyToByteArray(buffer, &charArray);
        memcpy((void*)pbBuffer, (const void*)charArray->Data, dwLen);
        return TRUE;
    }
    return FALSE;
}

}